package main.二叉树;

import common.TreeNode;

/**
 * @author tmh
 * @date 2024/7/20 14:53
 * @description
 */
public class T543二叉树的直径 {
    int ans = 0;

    public int diameterOfBinaryTree(TreeNode root) {
        dfs(root);
        return ans;
    }

    private int dfs(TreeNode root) {
        if (root == null) {
            return -1;//这里的-1对应下面的+1，这样叶子节点的长度就刚好是0
        }
        //往左遍历
        int leftLen = dfs(root.left);
        //往右遍历
        int rightLen = dfs(root.right);
        //更新ans
        ans= Math.max(ans, leftLen + rightLen+2);
        //返回的就是左子树的最长链leftLen,和右子树的最长链rightLen的最大值在加上一
        return Math.max(leftLen,rightLen)+1;
    }
}
